অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) মেসেজ ব্রোকারের মাধ্যমে মেসেজের প্রেরণ এবং গ্রহণের সময়, মেসেজের দীর্ঘস্থায়িতা (Persistence) একটি গুরুত্বপূর্ণ বিষয়। এটি নির্ধারণ করে যে মেসেজগুলি ডিফল্টভাবে কিউ বা টপিকে কতদিন থাকবে এবং সিস্টেম বন্ধ হওয়ার পরও সেগুলি কি সংরক্ষিত থাকবে। অ্যাকটিভএমকিউ মেসেজ ডেলিভারি দুইটি প্রধান মোডে পরিচালনা করে: Persistent এবং Non-persistent।
Persistent মেসেজ ডেলিভারি মোড নিশ্চিত করে যে মেসেজটি একবার পাঠানো হলে, সেটি ডাটাবেস বা ফাইল সিস্টেমে সেভ হয়ে যাবে এবং ব্রোকারের রিস্টার্ট বা সিস্টেম ক্র্যাশের পরও মেসেজটি হারিয়ে যাবে না। এই মোডে পাঠানো মেসেজগুলি দীর্ঘস্থায়ী (Persistent) হয়ে থাকে এবং তাদের ডেটা সিস্টেম বন্ধ বা ক্র্যাশ হওয়ার পরও পুনরুদ্ধার করা যায়।
import javax.jms.*;
public class PersistentMessageProducer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TEST_QUEUE");
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT); // Persistent Delivery Mode
TextMessage message = session.createTextMessage("This is a persistent message.");
producer.send(message);
System.out.println("Persistent message sent: " + message.getText());
connection.close();
}
}
উপরের কোডে, মেসেজটির ডেলিভারি মোড Persistent হিসেবে সেট করা হয়েছে, যার ফলে মেসেজটি ডাটাবেসে বা ফাইল সিস্টেমে সংরক্ষিত হবে।
Non-persistent মেসেজ ডেলিভারি মোডে, মেসেজটি পাঠানোর পর তা কোন স্থায়ী স্টোরেজে সংরক্ষিত হয় না। এটি শুধুমাত্র মেমরি বা টেম্পোরারি স্টোরেজে রক্ষা পায় এবং সিস্টেম বন্ধ বা ক্র্যাশ হলে মেসেজটি হারিয়ে যায়। এই মোডটি সাধারণত পারফরম্যান্স বৃদ্ধি করতে ব্যবহৃত হয়, কারণ এতে ডেটা স্টোরেজের জন্য অতিরিক্ত সময় লাগে না।
import javax.jms.*;
public class NonPersistentMessageProducer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TEST_QUEUE");
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // Non-persistent Delivery Mode
TextMessage message = session.createTextMessage("This is a non-persistent message.");
producer.send(message);
System.out.println("Non-persistent message sent: " + message.getText());
connection.close();
}
}
উপরের কোডে, মেসেজটির ডেলিভারি মোড Non-persistent হিসেবে সেট করা হয়েছে, যার ফলে মেসেজটি মেমরিতে সংরক্ষিত হবে এবং সিস্টেম বন্ধ হলে তা হারিয়ে যাবে।
বৈশিষ্ট্য | Persistent (স্থায়ী) | Non-persistent (অস্থায়ী) |
---|---|---|
সংরক্ষণ | ডাটাবেস বা ফাইল সিস্টেমে সংরক্ষিত | মেমরি বা টেম্পোরারি স্টোরেজে সংরক্ষিত |
নির্ভরযোগ্যতা | উচ্চ (মেসেজ ক্র্যাশ বা রিস্টার্টের পরও পাওয়া যায়) | কম (ক্র্যাশ হলে মেসেজ হারিয়ে যায়) |
পারফরম্যান্স | কম (স্টোরেজে সেভ করতে সময় নেয়) | উচ্চ (দ্রুত মেসেজ প্রেরণ) |
ব্যবহার | গুরুত্বপূর্ণ ডেটা বা মেসেজ যেখানে ডাটা হারানো যাবে না | কম গুরুত্বপূর্ণ ডেটা যেখানে দ্রুত প্রক্রিয়াকরণ প্রয়োজন |
অ্যাপাচি অ্যাকটিভএমকিউ মেসেজ ডেলিভারি মোড দুটি প্রদান করে: Persistent এবং Non-persistent। Persistent মোড মেসেজগুলো স্থায়ীভাবে সংরক্ষণ করে এবং সিস্টেমের রিস্টার্টের পরও তা পুনরুদ্ধার করা যায়, তবে এতে কিছুটা কম পারফরম্যান্স পাওয়া যায়। অপরদিকে, Non-persistent মোডে মেসেজগুলি দ্রুত প্রেরিত হয়, কিন্তু সিস্টেম বন্ধ হলে তা হারিয়ে যায়। অ্যাপ্লিকেশন বা সিস্টেমের প্রয়োজন অনুযায়ী মেসেজ ডেলিভারি মোড নির্বাচন করা উচিত।
common.read_more